summaryrefslogtreecommitdiffstats
path: root/src/audio_core/renderer/command/performance/performance.cpp
blob: 4a881547f2df68119d47916d75fe618296e27b99 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
// SPDX-FileCopyrightText: Copyright 2022 yuzu Emulator Project
// SPDX-License-Identifier: GPL-2.0-or-later

#include "audio_core/renderer/adsp/command_list_processor.h"
#include "audio_core/renderer/command/performance/performance.h"
#include "core/core.h"
#include "core/core_timing.h"

namespace AudioCore::AudioRenderer {

void PerformanceCommand::Dump([[maybe_unused]] const ADSP::CommandListProcessor& processor,
                              std::string& string) {
    string += fmt::format("PerformanceCommand\n\tstate {}\n", static_cast<u32>(state));
}

void PerformanceCommand::Process(const ADSP::CommandListProcessor& processor) {
    auto base{entry_address.translated_address};
    if (state == PerformanceState::Start) {
        auto start_time_ptr{reinterpret_cast<u32*>(base + entry_address.entry_start_time_offset)};
        *start_time_ptr =
            static_cast<u32>(processor.system->CoreTiming().GetClockTicks() - processor.start_time -
                             processor.current_processing_time);
    } else if (state == PerformanceState::Stop) {
        auto processed_time_ptr{
            reinterpret_cast<u32*>(base + entry_address.entry_processed_time_offset)};
        auto entry_count_ptr{
            reinterpret_cast<u32*>(base + entry_address.header_entry_count_offset)};

        *processed_time_ptr =
            static_cast<u32>(processor.system->CoreTiming().GetClockTicks() - processor.start_time -
                             processor.current_processing_time);
        (*entry_count_ptr)++;
    }
}

bool PerformanceCommand::Verify(const ADSP::CommandListProcessor& processor) {
    return true;
}

} // namespace AudioCore::AudioRenderer